// 实例化nwe路由
const router = require('koa-router')()
// 统一给前端返回的josn方式
const result = require('../jian-config/body-result.js')
// 数据库操作的接口
const { getToken, addurl, chaxun_refer, Updateurl, subscribe,program } = require('../jian-config/shuojuku-database.js') // addurl 数据库插入记录链接
// 校监前端数据传过来的时候是否验证合格
const { postcode } = require('../jian-config/xiaoyan-charm.js')
// 验证token的合法性
const { Decryption } = require('../jian-config/jiami-token.js')
// 图片上传
const { buffer } = require('../tengxunyun-cos/multer-cos.js')
// 时间戳
const moment = require('moment/moment.js')

// 添加桌号
router.get('/qrcode', new Decryption().m, async ctx=>{
	let {table} =  ctx.query
	// 校验
	// new regcheck(ctx,table).start()
	let time = moment().utcOffset(8).format('YYYY-MM-DD HH:mm:ss')
	try{
		// 查询该桌号是否已存在
		const query = `db.collection('zuohao-code').where({table:'${table}'}).get()`
		const res = await new getToken().database(chaxun_refer,query)
		if(res.data.length > 0){
            new result(ctx, '该桌号已经存在', 202)
		}else{
			let res_code = await new getToken().qrcode(table) //获取小程序二维码数据
            // 1670383765754-58008788.jpg 更改小程序二维码的名字
            const code_name = Date.now() + '-' + Math.round(Math.random() * 1E9) + '.jpg'
			let res_image = await buffer(code_name,res_code.data) // 存储二维码数据
			let code_image = 'https://' + res_image
            console.log(code_image,'code_image');
			let table_data = `db.collection('zuohao-code').add({data:{time:'${time}',table:'${table}',code:'${code_image}'}})`
			await new getToken().database(addurl,table_data)
			new result(ctx,'添加成功',200)
		}
	}catch(e){
		new result(ctx,'服务器发生错误',500)
	}
})

// 请求所有桌号
router.get('/getqrcode',new Decryption().m, async ctx=>{
	let {page} = ctx.query
	let sk = Number(page) * 10
	const query  =`db.collection('zuohao-code').orderBy('time','desc').limit(10).skip(${sk}).get()`
	try{
		const res = await new getToken().database(chaxun_refer,query)
		const data = res.data.map(item=>{return JSON.parse(item)})
		const tatal = {tatal:res.pager.Total}
		const array = {...{result:data},...tatal}
		new result(ctx,'获取成功',200,array)
	}catch(e){
		new result(ctx,'服务器发生错误',500)
	}
})

// 七天销售额

router.get('/salesvolume',new Decryption().m, async ctx=>{
	try{
	// 最终得到的数据类型
	// [{time:'2021-09-18',sales_volume:200},{time:'2021-09-17',sales_volume:300}]
	 let arr = [6,5,4,3,2,1,0]
	 let catedays = arr.map((item)=>{
        // .subtract(item,'days') 遍历前七天日期
		 return moment().utcOffset(8).subtract(item,'days').format('YYYY-MM-DD')
	 })
	 let str = JSON.stringify(catedays)
	// 查询数据库对应的日期
	const query = `db.collection('sales-xiaoshoue').where({time:db.command.in(${str})}).orderBy('time','asc').field({time:true,sett_amount:true}).get()`
	const res = await new getToken().database(chaxun_refer, query)
	const data = res.data.map(item=>{
		return{
			sett_amount:JSON.parse(item).sett_amount,
			time:JSON.parse(item).time,
			unix:moment(JSON.parse(item).time).unix() // 时间戳：为了后面按照日历表排序
		}
	})
	// 取前七天
	let days = catedays.map(item=>{
		return {sett_amount:0,time:item,unix:moment(item).unix()}
	})
	// 数组对象去重
	let obj = {}
	let removal = [...data,...days].reduce((prev,item)=>{
		// prev第一次遍历接收初始值[], 可以存储上一次遍历的结果
		if(!obj[item.time]){
			prev.push(item)
			obj[item.time] = true
		}
		return prev
	},[])
    // []初始值，也可以表示最终返回什么类型的数据
	// 数组对象排序：按照unix来排序：日历表
	let res_sort = removal.sort((A,B)=>{
		return (A.unix - B.unix) //-降序+升序
	})
	    new result(ctx,'获取成功',200,res_sort)
	}catch(e){
		new result(ctx,'服务器发生错误',500)
	}
})




module.exports = router.routes()